Tinker 不只可以拿來搜尋資料,當然也可以對資料進行新增修改等動作,此時先來新增一名叫 steven 的使用者
App\Models\User::create(['name'=>'steven', 'gender' => 1])
卻發現跳出了警告
Illuminate\Database\Eloquent\MassAssignmentException with message 'Add [name] to fillable property to allow mass assignment on [App\Models\User].'
是因為有一個 fillable 的參數要設定,有被加入該參數的 column 才能進行新增或修改。
protected $fillable = [
'name',
'gender',
];
但也是有以下方式可以繞過 fillable 來新增資料
$user = new App\Models\User()
$user->name = ‘tod’
$user->gender = 1
$user->save()
下一個要介紹的參數是 hidden ,該參數可以讓指定的 column 在沒有被特定搜尋的時候隱藏,舉例來說我並不想在平常就顯示使用者的性別,那麼我就將 gender 加入 hidden 裡面
protected $hidden = [
'gender',
];
此時將搜尋出來的資料陣列化時就會自動將該 column 隱藏,常用於隱藏密碼或一些敏感資料
casts 參數可以將輸出的資料轉為設定的格式
protected $casts = [
'updated_at' => 'datetime:Y-m-d H:i:s',
];
最後要介紹的是 set 及 get attribute,attribute 可以在資料讀取或是寫入前做一些提前的處理,最常見的 set attribute 會用於密碼的寫入,眾所皆知密碼是不能以明碼的方式存進資料庫,所以寫一個密碼的 set attribute 就可以保證任何關於密碼的變動都會做雜湊,但這次的舉例中沒有密碼的 column ,所以直接寫 code 做示範。
假設密碼在 User 的 column 名稱為 password ,那麼便在 User 的 model 加上這段 method:
public function setPasswordAttribute($value)
{
$this->attributes['password'] = Hash::make($value);
}
get attribute 則是可以將資料讀取出來之後做處理或是組合,以這次的例子,我想在 User 直接寫一個自我介紹姓名跟性別,我可以這麼做
public function getSelfIntroductionAttribute()
{
$gender = '';
if ($this->gender == 0) {
$gender = '女生';
} elseif ($this->gender == 1) {
$gender = '男生';
}
return '你好,我叫' . $this->name . ',我是' . $gender;
}
attribute 在使用上只需要注意 method 的命名要使用小駝峰,在用來搜尋的時候要用底線即可,以上就是幾個在 Model 較常使用的 Method。